package Herramientas;

import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JFrame;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.util.TableOrder;

public class Graficas {

	
	public static final String  mejorGen= "mejor generacion";
	public static final String  mediaGeneracion= "media generacion";
	public static final String  mejorGlobal= "mejor global";
	enum TiposDeGrafico {

	    AreaChart, BarChart, BarChart3D, LineChart, LineChart3D, MultiplePieChart, MultiplePieChart3D
	}
	
	public static JFreeChart pintarGrafica(String funcion,ArrayList<Double> listaMejoresGen, ArrayList<Double> listaMejoresGlobal, ArrayList<Double> mediaGen){
	
		DefaultCategoryDataset dataset=new DefaultCategoryDataset();
		//DefaultCategoryDataset dataset1=new DefaultCategoryDataset();
		Iterator<Double> it = listaMejoresGen.iterator();
		Iterator<Double> it1 = listaMejoresGlobal.iterator();
		Iterator<Double> it2 = mediaGen.iterator();
		int i =1;
		int z = 1;
		int k =1;
		while(it.hasNext()){
			Double d = it.next();
			dataset.setValue(d.doubleValue(), mejorGen, new Integer(i));
			
			i++;
		}
		while(it1.hasNext()){
			Double d = it1.next();
			dataset.setValue(d.doubleValue(), mejorGlobal, new Integer(z));
			z++;
		}
		while(it2.hasNext()){
			Double d = it2.next();
			dataset.setValue(d.doubleValue(),mediaGeneracion, new Integer(k));
			k++;
		}
		  JFreeChart chart = null;
          for (TiposDeGrafico j : TiposDeGrafico.values()) {
             chart = createChart(dataset, TiposDeGrafico.LineChart,funcion);
          }
              
          	  
          	  ChartPanel panel = new ChartPanel(chart);
                  return chart;
		
	}
	 private static JFreeChart createChart(CategoryDataset dataset, TiposDeGrafico tipo,String funcion) {
	        // Hacemos la ventana con el gr�fico
	        // Los tres booleans del final:
	        // - Si se deben mostrar las leyendas con el nombre de los sitios web
	        // - Si se deben mostrar tooltip al poner el rat�n sobre las barras
	        // - Si se muestran las url
	        JFreeChart chart;
	        switch (tipo) {
	            case AreaChart:
	                chart = ChartFactory.createAreaChart(funcion, "generacion",
	                        "Aptitud", dataset, PlotOrientation.VERTICAL, true,
	                        true, true);
	                
	                break;
	            case BarChart:
	                chart = ChartFactory.createBarChart(funcion, "generacion",
                    "Aptitud", dataset, PlotOrientation.VERTICAL, true,
                    true, true);
	                break;
	            case BarChart3D:
	                chart = ChartFactory.createBarChart3D(funcion, "generacion",
	                        "Aptitud", dataset, PlotOrientation.VERTICAL, true,
	                        true, true);
	                break;
	            case LineChart:
	                chart = ChartFactory.createLineChart(funcion, "generacion",
	                        "Aptitud", dataset, PlotOrientation.VERTICAL, true,
	                        true, true);
	                break;
	            case LineChart3D:
	                chart = ChartFactory.createLineChart3D(funcion, "generacion",
	                        "Aptitud", dataset, PlotOrientation.VERTICAL, true,
	                        true, true);
	                break;
	            case MultiplePieChart:
	                chart = ChartFactory.createMultiplePieChart("Visitas", dataset,
	                        TableOrder.BY_COLUMN, true, true, true);
	                break;
	            case MultiplePieChart3D:
	                chart = ChartFactory.createMultiplePieChart3D("Visitas", dataset,
	                        TableOrder.BY_COLUMN, true, true, true);
	                break;
	            default:
	                chart = null;
	        }
	        return chart;
	    }
	
	
	
}
